// src/utils/i18n.js
import { getLangJson } from '@/api/language.js';
import { useUserStore } from '@/stores/user.js';
import { computed, ref } from 'vue';

// 语言数据缓存
let languageData = {};
let currentLang = 'zh-CN';
let isInitialized = false;

// 响应式语言状态
const currentLangRef = ref('zh-CN');
const languageDataRef = ref({});

/**
 * 初始化国际化
 */
export const initI18n = async () => {
  if (isInitialized) {
    return;
  }

  const userStore = useUserStore();
  currentLang = userStore.currentLanguage || 'zh-CN';
  currentLangRef.value = currentLang;

  try {
    // 获取语言数据
    const response = await getLangJson();
    if (response && response.data) {
      languageData = response.data;
      languageDataRef.value = response.data;
      isInitialized = true;
      console.log('i18n 初始化成功，当前语言:', currentLang);
    }
  } catch (error) {
    console.error('获取语言数据失败:', error);
    // 初始化失败时使用默认数据
    languageData = {
      'zh-CN': {},
      'en-US': {}
    };
    languageDataRef.value = languageData;
    isInitialized = true;
  }
};

/**
 * 切换语言
 * @param {string} langCode 语言代码
 */
export const switchLanguage = async (langCode) => {
  const userStore = useUserStore();

  // 更新当前语言
  currentLang = langCode;
  currentLangRef.value = langCode;
  userStore.setLanguage(langCode);

  // 重新获取语言数据
  try {
    const response = await getLangJson();
    if (response && response.data) {
      languageData = response.data;
      languageDataRef.value = response.data;
      console.log('语言切换成功:', langCode);
    }
  } catch (error) {
    console.error('切换语言时获取数据失败:', error);
  }
};

/**
 * 获取当前语言
 * @returns {string} 当前语言代码
 */
export const getCurrentLanguage = () => {
  return currentLangRef.value;
};

/**
 * 检查是否已初始化
 * @returns {boolean} 是否已初始化
 */
export const isI18nInitialized = () => {
  return isInitialized;
};

/**
 * 获取翻译文本（响应式版本）
 * @param {string} key 翻译键
 * @param {string} langCode 语言代码，不传则使用当前语言
 * @returns {string} 翻译后的文本
 */
export const t = (key, langCode = null) => {
  const lang = langCode || currentLangRef.value;
  const data = languageDataRef.value;

  if (data[lang] && data[lang][key]) {
    return data[lang][key];
  }

  // 如果当前语言没有找到，尝试使用中文
  if (lang !== 'zh-CN' && data['zh-CN'] && data['zh-CN'][key]) {
    return data['zh-CN'][key];
  }

  // 如果都没有找到，返回key本身
  return key;
};

/**
 * 创建响应式翻译函数
 * @param {string} key 翻译键
 * @returns {ComputedRef<string>} 响应式翻译文本
 */
export const useT = (key) => {
  return computed(() => t(key)).value;
};
